package com.jilefojing.session.service;

import com.jilefojing.beans.enums.ServerTypeEnum;
import com.jilefojing.beans.exception.UserContextException;
import com.jilefojing.context.beans.vo.UserContext;

/**
 * 用户上下文服务
 * 
 * @author jgshun
 * 
 */
public interface IUserContextService {

	/**
	 * 获取默认的用户上下文即从session中获取的上下文
	 * 
	 * @return
	 */
	public UserContext getDefaultUserContext();

	/**
	 * 加载用户上下文:因为GKServer有第三方登录的情况，会造成没有账户的情况，GKServer暂时用这个加载上下文
	 * 
	 * @param userId
	 * @return
	 */
	UserContext loadUserContext(long userId, ServerTypeEnum serverType)
			throws UserContextException;

	/**
	 * 加载用户上下文
	 * 
	 * @param account
	 * @param password
	 *            明文密码
	 * @return
	 */
	UserContext loadUserContext(String account, String password,
			ServerTypeEnum typeEnum) throws UserContextException;

	/**
	 * 加载用户上下文
	 * 
	 * @param account
	 * @param encryptPassword
	 *            密文密码
	 * @return
	 */
	UserContext loadUserContextWithEncryptPassword(String account,
			String encryptPassword, ServerTypeEnum typeEnum)
			throws UserContextException;

	/**
	 * 加载用户上下文
	 * 
	 * @param account
	 * @return
	 */
	UserContext loadUserContextWithoutPassword(String account,
			ServerTypeEnum typeEnum) throws UserContextException;

	/**
	 * 清除用户上下文
	 * 
	 * @param userContext
	 */
	void removeUserContext(UserContext userContext) throws UserContextException;

	/**
	 * 验证用户上下文
	 * 
	 * @param userContext
	 * @return
	 */
	boolean checkUserContext(UserContext userContext)
			throws UserContextException;

	/**
	 * 校验是否为后台用户，不是则抛出异常
	 * 
	 * @param userContext
	 * @throws UserContextException
	 */
	void isjilefojingServer(UserContext userContext) throws UserContextException;
}
